/*
 *  Лицензия MIT
 * 
 *  Copyright 2011 Salnikov Aleksey.
 * 
 *  Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного обеспечения
 *  и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),
 *  использовать Программное Обеспечение без ограничений, включая неограниченное право
 *  на использование, копирование, изменение, объединение, публикацию, распространение,
 *  сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам,
 *  которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
 * 
 *  Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые
 *  части данного Программного Обеспечения.
 * 
 *  ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ,
 *  ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
 *  СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ
 *  НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ
 *  ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ
 *  С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 *  ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
 */

package look;

import CommonTools.DesignTools;
import CommonTools.Settings;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

/**
 * Класс окна настроек клиентской части
 *
 * @author Salnikov Aleksey
 */
public class SettingsWindow extends JFrame{

    protected JTextField serverIp, serverPort, secretWord;
    protected JButton save;
    protected JComboBox timerCb;
    protected JCheckBox hideNoticeCb, soundNoticeCb;

    public SettingsWindow()
    {
        super("Настройки | Клиент Ordo");
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        /*******************************************************
         * Расставляем все компоненты
         ******************************************************/
        Container c = this.getContentPane();
        c.setLayout(new GridBagLayout());
        GridBagConstraints gbcL = new GridBagConstraints();
        GridBagConstraints gbcF = new GridBagConstraints();
        gbcL.weightx = 0.5;
        gbcL.weighty = 0.5;
        gbcL.anchor = gbcL.NORTHWEST;
        gbcL.gridx = 0;
        gbcL.gridy = 0;

        gbcL.insets = new Insets(8,3,0,5);
        gbcF.insets = new Insets(3,0,0,5);
        gbcF.ipadx = 150;
        gbcF.fill = gbcF.HORIZONTAL;

        JLabel ip = new JLabel("IP сервера:");
        JLabel port = new JLabel("Порт сервера:");
        JLabel timer = new JLabel("Период обновления:");
        JLabel passL = new JLabel("Пароль:");
        c.add(ip, gbcL);
        gbcL.gridy = 1;
        c.add(port, gbcL);
        gbcL.gridy = 2;
        c.add(timer, gbcL);
        gbcL.gridy = 5;
        c.add(passL, gbcL);

        serverIp = new JTextField();
        serverPort = new JTextField();
        gbcF.gridx = 1;
        gbcF.gridy = 0;
        c.add(serverIp, gbcF);
        gbcF.gridy = 1;
        c.add(serverPort, gbcF);

        //Установка таймера
        timerCb = new JComboBox();
        timerCb.addItem("Отключить");
        timerCb.addItem("15 секунд");
        timerCb.addItem("30 секунд");
        timerCb.addItem("1 минута");
        timerCb.addItem("2 минуты");
        timerCb.addItem("5 минут");
        gbcF.gridy = 2;
        c.add(timerCb, gbcF);

        //Прятать заявки
        hideNoticeCb = new JCheckBox("Скрывать уведомления автоматически");
        gbcF.gridy = 3;
        c.add(hideNoticeCb, gbcF);

        //Звуковое уведовление
        soundNoticeCb = new JCheckBox("Включить звуковое уведомление");
        gbcF.gridy = 4;
        c.add(soundNoticeCb, gbcF);

        //Пароль для сохранения
        secretWord = new JTextField();
        gbcF.gridy = 5;
        c.add(secretWord, gbcF);

        save = new JButton("Сохранить");
        gbcF.gridy = 6;
        gbcF.anchor = gbcF.SOUTHEAST;
        gbcF.fill = gbcF.NONE;
        c.add(save, gbcF);
        
        loadConfiguration();

        save.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    saveConf();
                }
            });

        /*******************************************************
         * Последняя настройка
         ******************************************************/
        this.setResizable(false);
        DesignTools.centeredWindow(this);
        this.pack();
        this.validate();
        this.setVisible(true);
    }

    protected void loadConfiguration()
    {
        serverIp.setText(Settings.getParametrValue("serverip"));
        serverPort.setText(Settings.getParametrValue("serverport"));

        long timeRefresh = Long.parseLong(Settings.getParametrValue("timer"));
        if (timeRefresh == 0)
            timerCb.setSelectedIndex(0);
        else
            if (timeRefresh == 15000)
                timerCb.setSelectedIndex(1);
            else
                if (timeRefresh == 30000)
                    timerCb.setSelectedIndex(2);
                else
                    if (timeRefresh == 60000)
                        timerCb.setSelectedIndex(3);
                    else
                        if (timeRefresh == 12000)
                            timerCb.setSelectedIndex(4);
                        else
                            timerCb.setSelectedIndex(5);

        if (Settings.getParametrValue("hidenotice").equals("1"))
            hideNoticeCb.setSelected(true);
        else
            hideNoticeCb.setSelected(false);

        soundNoticeCb.setSelected(Settings.getParametrValue("soundnotice").equals("1"));
    }

    protected void saveConf()
    {
        if (serverIp.getText().length() > 0 && serverPort.getText().length() > 0)
        {
            if (secretWord.getText().equals(Settings.codeString(Settings.getParametrValue("secretword"))))
            {
                Settings.changeParametr("serverip", serverIp.getText());
                Settings.changeParametr("serverport", serverPort.getText());

                String timer;
                if (timerCb.getSelectedIndex() == 0)
                    timer = "0";
                else
                    if (timerCb.getSelectedIndex() == 1)
                        timer = "15000";
                    else
                        if (timerCb.getSelectedIndex() == 2)
                            timer = "30000";
                        else
                            if (timerCb.getSelectedIndex() == 3)
                                timer = "60000";
                            else
                                if (timerCb.getSelectedIndex() == 4)
                                    timer = "120000";
                                else
                                    timer = "300000";

                Settings.changeParametr("timer", timer);

                if (hideNoticeCb.isSelected())
                    Settings.changeParametr("hidenotice", "1");
                else
                    Settings.changeParametr("hidenottice", "0");

                Settings.changeParametr("soundnotice", soundNoticeCb.isSelected() ? "1" : "0");

                Settings.saveConfiguration();

                this.dispose();
            }
            else
                DesignTools.showMessage("Ошибка", "Пароль указан неверно", false);
        }
        else
            DesignTools.showMessage("Настройки не сохранены", "Все поля должны быть заполнены", false);
    }

}
